package java_thinking.unit_19._19_10;

import java.util.EnumSet;

/**
 * @Desc:   19.10.3  enum元素它们都是static实例，无法访问外部非静态方法，所以对内部enum 实例
 *                  而言，其行为与一般的内部类并不相同
 * @author: cww
 * @DateTime: 2019/5/23 20:57
 */


public class CarWash {
    enum Cycle {
        UNDERBODY {
            void action() {
                System.out.println("Spraying the underbody");
            }
        },
        WHEELWASH {
            void action() {
                System.out.println("Spraying the wheels");
            }
        },
        PREWASH {
            void action() {
                System.out.println("Loosening the dirt");
            }
        },
        BASIC {
            void action() {
                System.out.println("The basic wash");
            }
        },
        HOTWAX {
            void action() {
                System.out.println("Applying hot wax");
            }
        },
        RINSE {
            void action() {
                System.out.println("Rinsing");
            }
        },
        BLOWDRY {
            void action() {
                System.out.println("Blowing dry");
            }
        };

        abstract void action();
    }

    /**
     * 向 EnumSet 添加enum 实例的顺序并不重要，因为其输出的次序决定于enum 实例定义时的次序
     */
    EnumSet<Cycle> cycles = EnumSet.of(Cycle.BASIC, Cycle.RINSE);
    public void add(Cycle cycle) {
        cycles.add(cycle);
    }
    public void washCar() {
        for (Cycle c : cycles) {
            c.action();
        }
    }

    @Override
    public String toString() {
        return cycles.toString();
    }

    public static void main(String[] args) {
        CarWash wash = new CarWash();
        System.out.println(wash);
        wash.washCar();
    }

}
